package model

import (
	"golang.org/x/crypto/bcrypt"
	"gorm.io/gorm"
)

/**
其实简单来说bcrypt就是一种加盐的单向Hash，不可逆的加密算法，同一种明文(plaintext)，
每次加密后的密文都不一样，而且不可反向破解生成明文，破解难度很大
*/

type User struct {
	gorm.Model
	UserName string
	Password string
}

// 密码加密难度
const PasswordCost = 12

// 设置密码
func (user *User) SetPassword(password string) error {
	//
	bytes, err := bcrypt.GenerateFromPassword([]byte(user.Password), PasswordCost)
	if err != nil {
		return err
	}
	user.Password = string(bytes)
	return nil
}

// 校验密码
func (user *User) CheckPassword(password string) bool {
	err := bcrypt.CompareHashAndPassword([]byte(user.Password), []byte(password))
	return err == nil
}
